package main
import (
	"fmt"
	"net"
)

func main() {
	fmt.Println("服务端启动")
	// 创建监听:指定服务器端的tcp协议，ip地址和端口
	ln, err := net.Listen("tcp", "127.0.0.1:8080")
	if err != nil {
		fmt.Println("服务端启动失败", err)
		return
	}
	// 监听成功后
	// 等待客户端连接

	for {
		conn, err2 := ln.Accept()
		if err2 != nil {
			fmt.Println("客户端连接失败", err2)
		} else {
			fmt.Println("客户端连接成功")
			// 服务端处理客户端请求
			fmt.Println("conn = ", conn)
			fmt.Printf("客户端地址：%s\n", conn.RemoteAddr())
			// 准备一个协程，处理客户端请求
			go process(conn)
		}
	}
	
}

func process(conn net.Conn) {
	defer conn.Close()
	fmt.Println("客户端请求处理开始")
	defer func() {
		if err := recover(); err != nil {
			fmt.Println("客户端请求处理结束，捕获到异常", err)
		} else {
			fmt.Println("客户端请求处理结束")
		}
	}()

	
	// 创建一个切片，准备：将读取的数据放入切片中
	data := make([]byte, 1024)
	// 从conn连接中读取数据
	n, err := conn.Read(data)
	fmt.Println(n)
	if err != nil {
		fmt.Println("客户端请求处理结束，读取数据失败", err)
		return
	}
	fmt.Println("客户端请求数据：", string(data[:n]))
	// 回复客户端请求
}